/*
 *
 * Archivo de utilidades
 *
 * @author Pato Silva
 * @date 16 de junio de 2012
 * @version 0.1
 *
 */
 


 
 
 /* Hace el reporte del estado actual del sistema en el puerto serie
  * El primer caracter es el grupo: v=velocidad, s=servo, c=configuracion, e=estado, p=valores del lazo PID
  * El segundo y tercero indica la variable de la cual se da el valor
  * El resto de los caracteres hasta el salto de linea es el valor (char)*/
 void enviar_reporte_estado(){
	Serial.print("vum");                 // Momento de la ultima medicion de velocidad
	Serial.println(ultima_medicion);

	Serial.print("vac");                 // Velocidad actual
	Serial.println(velocidad_actual);

	Serial.print("vse");                // Velcidad seteada
	Serial.println(velocidad_crucero);
		  
	Serial.print("sac");                 // Posicion actual del servo
	Serial.println(posicion_servo);

	Serial.print("cco");                // Esta configurado (si o no)
	Serial.println(esta_configurado);

	Serial.print("cac");                // Coheficiente de aceleracion configurado
	Serial.println(coheficiente_ajuste_velocidad, 10);

	Serial.print("eac");                 // Estado control activo
	Serial.println(control_activo);

	Serial.print("ets");                 // Estado (posicion) del tps
	Serial.println(analogRead(TPS_ANALOG_PIN));

	Serial.print("est");                // Estado boton set presionado
	Serial.println(presionado_set);

	Serial.print("ere");                // Estado boton resume presionado
	Serial.println(presionado_resume);

	Serial.print("eup");                // Estado boton up presionado
	Serial.println(presionado_up);

	Serial.print("edn");                // Estado boton down presionado
	Serial.println(presionado_down);

	Serial.print("ers");                // Estado reportar estaod
	Serial.println(reportar_estado);

	Serial.print("ere");                // Estado reportar eeprom
	Serial.println(reportar_eeprom);

	Serial.print("pui");                // Valor PID de ultimo ingreso al proceso
	Serial.println(ultimo_ingreso_pid);

	Serial.print("per");                // Valor PID del ultimo error
	Serial.println(error_menos_uno, 5);

	Serial.print("ppr");                // Valor PID del proporcional
	Serial.println(proporcional, 5);
	
	Serial.print("pin");                // Valor PID del integrative
	Serial.println(integrative, 5);

	Serial.print("pde");                // Valor PID del derivative
	Serial.println(derivative, 5);

	Serial.print("pdt");                // Valor PID del tiempo de ciclo
	Serial.println(Dt);

	Serial.print("pkp");                // Valor PID del kp
	Serial.println(Kp, 5);

	Serial.print("pki");                // Valor PID del ki
	Serial.println(Ki, 5);

	Serial.print("pkd");                // Valor PID del kd
	Serial.println(Kd, 5);
}
 
void ejecutar_comando(){
  int rheader = read_serial();
  if(rheader == 255){
    int rvalue = read_serial();
    switch(rvalue){
      case 1:{
        posicion_servo = (read_serial() << 8) + read_serial();
        break;
      }
      case 2:{
        velocidad_crucero = (read_serial() << 8) + read_serial();
        break;
      }
      case 3:{
        read_serial();
        esta_configurado = read_serial() == 1;
        break;
      }
      case 4:{
        read_serial();
        control_activo = read_serial() == 1;
        break;
      }
      case 5:{
        coheficiente_ajuste_velocidad = (float)((read_serial() << 8) + read_serial())/1000;
        break;
      }
      case 6:{
        read_serial();
        reportar_estado = read_serial() == 1;
        break;
      }
      case 7:{
        read_serial();
        reportar_eeprom = read_serial() == 1;
        break;
      }
      case 8:{    
        EEPROM_write_int(176, ((read_serial() << 8) + read_serial()));
        Dt = EEPROM_read_int(176);
        break;
      }
      case 9:{
        EEPROM_write_int(170, ((read_serial() << 8) + read_serial()));
        Kp = (float)EEPROM_read_int(170)/1000;
        break;
      }
      case 10:{
        EEPROM_write_int(172, ((read_serial() << 8) + read_serial()));
        Ki = (float)EEPROM_read_int(172)/1000;
        break;
      }
      case 11:{
        EEPROM_write_int(174, ((read_serial() << 8) + read_serial()));
        Kd = (float)EEPROM_read_int(174)/1000;
        break;
      }
      case 20:{
        int pos = read_serial();
        EEPROM.write(pos, read_serial());
        break;
      }
      default:{
        Serial.print("euc");
        Serial.println(rvalue);
        flush_serial();
        break;
      }
    }
  }else{
    Serial.print("euh");
    Serial.println(rheader);
    flush_serial();
  }
}










